From: Daniel De Graaf Date: Tue, 4 Mar 2014 22:51:34 +0000 (-0500) Subject: xenstored: add --master-domid to support domain builder X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5496 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22?a=commitdiff_plain;h=739c5ee78d438a0530002c5876333990ada99fd8;p=xen.git xenstored: add --master-domid to support domain builder When a domain builder stub domain is used, the initial xenstore connection to domain 0 may use a different domain ID as the endpoint; allow this domain ID to be specified on the command line. Signed-off-by: Daniel De Graaf Acked-by: Ian Jackson Cc: Stefano Stabellini Cc: Ian Campbell --- diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 2324e53791..47f0722967 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -1795,6 +1795,7 @@ static struct option options[] = { { "entry-nb", 1, NULL, 'E' }, { "pid-file", 1, NULL, 'F' }, { "event", 1, NULL, 'e' }, + { "master-domid", 1, NULL, 'm' }, { "help", 0, NULL, 'H' }, { "no-fork", 0, NULL, 'N' }, { "priv-domid", 1, NULL, 'p' }, @@ -1810,6 +1811,7 @@ static struct option options[] = { { NULL, 0, NULL, 0 } }; extern void dump_conn(struct connection *conn); +int dom0_domid = 0; int dom0_event = 0; int priv_domid = 0; @@ -1871,6 +1873,9 @@ int main(int argc, char *argv[]) case 'e': dom0_event = strtol(optarg, NULL, 10); break; + case 'm': + dom0_domid = strtol(optarg, NULL, 10); + break; case 'p': priv_domid = strtol(optarg, NULL, 10); break; diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index cfbcf6f3c3..dcf95b536d 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -170,6 +170,7 @@ void trace(const char *fmt, ...); void dtrace_io(const struct connection *conn, const struct buffered_data *data, int out); extern int event_fd; +extern int dom0_domid; extern int dom0_event; extern int priv_domid; @@ -177,6 +178,8 @@ extern int priv_domid; void *xenbus_map(void); void unmap_xenbus(void *interface); +static inline int xenbus_master_domid(void) { return dom0_domid; } + /* Return the event channel used by xenbus. */ evtchn_port_t xenbus_evtchn(void); diff --git a/tools/xenstore/xenstored_domain.c b/tools/xenstore/xenstored_domain.c index f24bd6bd18..f7bbb03c96 100644 --- a/tools/xenstore/xenstored_domain.c +++ b/tools/xenstore/xenstored_domain.c @@ -606,7 +606,7 @@ static int dom0_init(void) if (port == -1) return -1; - dom0 = new_domain(NULL, 0, port); + dom0 = new_domain(NULL, xenbus_master_domid(), port); if (dom0 == NULL) return -1; diff --git a/tools/xenstore/xenstored_minios.c b/tools/xenstore/xenstored_minios.c index 1c6f794d39..f9c921efc9 100644 --- a/tools/xenstore/xenstored_minios.c +++ b/tools/xenstore/xenstored_minios.c @@ -51,7 +51,7 @@ evtchn_port_t xenbus_evtchn(void) void *xenbus_map(void) { - return xc_gnttab_map_grant_ref(*xcg_handle, 0, + return xc_gnttab_map_grant_ref(*xcg_handle, xenbus_master_domid(), GNTTAB_RESERVED_XENSTORE, PROT_READ|PROT_WRITE); }